home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / asmbler.arc / CIO.ASM < prev    next >
Assembly Source File  |  1988-11-19  |  6KB  |  260 lines

  1. ASSUME  CS:C_IO
  2.  
  3. PUBLIC  C_CREAT,C_OPEN,C_CLOSE,C_READ,C_WRITE,UNLINK,C_BSEEK,RENAME,SEEK_RECORD
  4. PUBLIC  RECORD_ALIGN,C_IOCTL
  5.  
  6. ENTER   MACRO
  7.         PUSH    BP
  8.         MOV     BP,SP
  9.         ADD     BP,6
  10.         ENDM
  11.  
  12. EXIT    MACRO
  13.         POP     BP
  14.         ENDM
  15.  
  16. C_IO    SEGMENT PARA PUBLIC 'CODE'
  17.  
  18. C_CREAT PROC    FAR
  19.         ; function creat(const n: lstring; a: integer): integer;
  20.         ENTER
  21.         MOV     DX,[BP+2]
  22.         MOV     BX,DX
  23.         ADD     BL,[BX]
  24.         ADC     BH,0
  25.         MOV     BYTE PTR [BX+1],0
  26.         INC     DX
  27.         MOV     CX,[BP]
  28.         MOV     AH,03CH
  29.         INT     21H
  30.         JNC     CR1
  31.         NEG     AX
  32. CR1:    EXIT
  33.         RET     4
  34. C_CREAT ENDP
  35.  
  36. C_OPEN  PROC    FAR
  37.         ; function open(const n: lstring; a: integer): integer;
  38.         ENTER
  39.         MOV     DX,[BP+2]
  40.         MOV     BX,DX
  41.         ADD     BL,[BX]
  42.         ADC     BH,0
  43.         MOV     BYTE PTR [BX+1],0
  44.         INC     DX
  45.         MOV     AL,[BP]
  46.         MOV     AH,03DH
  47.         INT     21H
  48.         JNC     OP1
  49.         NEG     AX
  50. OP1:    EXIT
  51.         RET     4
  52. C_OPEN  ENDP
  53.  
  54. C_CLOSE PROC    FAR
  55.         ; function close(fd: integer): integer;
  56.         ENTER
  57.         MOV     BX,[BP]
  58.         MOV     AH,03EH
  59.         INT     21H
  60.         JC      CL1
  61.         XOR     AX,AX
  62. CL1:    EXIT
  63.         RET     2
  64. C_CLOSE ENDP
  65.  
  66. C_READ  PROC    FAR
  67.         ; function read(fd: integer; buff: adsmem; cnt: integer): integer;
  68.         ENTER
  69.         MOV     BX,[BP+6]
  70.         MOV     CX,[BP]
  71.         PUSH    DS
  72.         LDS     DX,DWORD PTR [BP+2]
  73.         MOV     AH,03FH
  74.         INT     21H
  75.         JNC     RE1
  76.         NEG     AX
  77. RE1:    POP     DS
  78.         EXIT
  79.         RET     8
  80. C_READ  ENDP
  81.  
  82. C_WRITE PROC    FAR
  83.         ; function write(fd: integer; buff: adsmem; cnt: integer): integer;
  84.         ENTER
  85.         MOV     BX,[BP+6]
  86.         MOV     CX,[BP]
  87.         PUSH    DS
  88.         LDS     DX,DWORD PTR [BP+2]
  89.         MOV     AH,040H
  90.         INT     21H
  91.         JNC     WR1
  92.         NEG     AX
  93. WR1:    POP     DS
  94.         EXIT
  95.         RET     8
  96. C_WRITE ENDP
  97.  
  98. UNLINK  PROC    FAR
  99.         ; function unlink(const n: lstring): integer;
  100.         ENTER
  101.         MOV     DX,[BP]
  102.         MOV     BX,DX
  103.         ADD     BL,[BX]
  104.         ADC     BH,0
  105.         MOV     BYTE PTR [BX+1],0
  106.         INC     DX
  107.         MOV     AH,041H
  108.         INT     21H
  109.         JC      UN1
  110.         XOR     AX,AX
  111. UN1:    EXIT
  112.         RET     2
  113. UNLINK  ENDP
  114.  
  115. C_BSEEK PROC    FAR
  116.         ; function bseek(fd: integer; block: integer; kind: integer):  integer;
  117.         ENTER
  118.         MOV     BX,[BP+4]
  119.         MOV     AL,[BP]
  120.         CMP     AL,1
  121.         JL      BS2
  122.         XOR     CX,CX
  123.         XOR     DX,DX
  124.         MOV     AH,042H
  125.         INT     21H
  126.         JC      BS1
  127.         MOV     CX,512
  128.         DIV     CX
  129.         ADD     AX,[BP+2]
  130.         MUL     CX
  131.         MOV     CX,DX
  132.         MOV     DX,AX
  133.         MOV     AL,0
  134.         MOV     AH,042H
  135.         INT     21H
  136.         JNC     BS1
  137.         NEG     AX
  138.         EXIT
  139.         RET     6
  140. BS2:    MOV     AX,512
  141.         MUL     WORD PTR [BP+2]
  142.         MOV     CX,DX
  143.         MOV     DX,AX
  144.         MOV     AH,042H
  145.         INT     21H
  146.         JNC     BS1
  147.         NEG     AX
  148.         EXIT
  149.         RET     6
  150. BS1:    MOV     BX,512
  151.         DIV     BX
  152.         EXIT
  153.         RET     6
  154. C_BSEEK ENDP
  155.  
  156. SEEK_RECORD     PROC    FAR
  157.         ; function seek_record(fd: integer; recnum,recsiz: integer):  integer;
  158.         ENTER
  159.         MOV     BX,[BP+4]
  160.         MOV     AX,[BP+2]
  161.         MUL     WORD PTR [BP]
  162.         MOV     CX,DX
  163.         MOV     DX,AX
  164.         MOV     AL,0
  165.         MOV     AH,042H
  166.         INT     21H
  167.         JC      RS1
  168.         DIV     WORD PTR [BP]
  169.         TEST    DX,DX
  170.         JNZ     RS1
  171.         EXIT
  172.         RET     6
  173. RS1:    MOV     AX,-6
  174.         EXIT
  175.         RET     6
  176. SEEK_RECORD     ENDP
  177.  
  178. RENAME  PROC    FAR
  179.         ; function rename(const n1,n2: lstring): integer;
  180.         ENTER
  181.         MOV     DX,[BP+4]
  182.         MOV     BX,DX
  183.         ADD     BL,[BX]
  184.         ADC     BH,0
  185.         MOV     BYTE PTR [BX+1],0
  186.         INC     DX
  187.         MOV     AX,DS
  188.         MOV     ES,AX
  189.         MOV     DI,[BP]
  190.         MOV     BX,DI
  191.         ADD     BL,[BX]
  192.         ADC     BH,0
  193.         MOV     BYTE PTR [BX+1],0
  194.         INC     DI
  195.         MOV     AH,056H
  196.         INT     21H
  197.         JC      RN1
  198.         XOR     AX,AX
  199. RN1:    EXIT
  200.         RET     4
  201. RENAME  ENDP
  202.  
  203. RECORD_ALIGN    PROC    FAR
  204.         ; function record_align(fd: integer; recsiz: integer):  integer;
  205.         ENTER
  206.         MOV     BX,[BP+2]
  207.         XOR     DX,DX
  208.         XOR     CX,CX
  209.         MOV     AL,1
  210.         MOV     AH,042H
  211.         INT     21H
  212.         JC      RA1
  213.         DIV     WORD PTR [BP]
  214.         TEST    DX,DX
  215.         JZ      RA2
  216.         INC     AX
  217.         PUSH    AX
  218.         MUL     WORD PTR [BP]
  219.         MOV     CX,DX
  220.         MOV     DX,AX
  221.         MOV     AL,0
  222.         MOV     AH,042H
  223.         INT     21H
  224.         POP     AX
  225.         JC      RA1
  226. RA2:    EXIT
  227.         RET     4
  228. RA1:    MOV     AX,-6
  229.         EXIT
  230.         RET     4
  231. RECORD_ALIGN    ENDP
  232.  
  233. C_IOCTL PROC    FAR
  234.         ; function ioctl(fd: integer; buff: adsmem; size,mode: integer): integer;
  235.         ENTER
  236.         PUSH    DS
  237.         MOV     BX,[BP+8]
  238.         LDS     DX,DWORD PTR [BP+4]
  239.         MOV     CX,[BP+2]
  240.         MOV     AL,[BP]
  241.         CMP     AL,1
  242.         JNE     IO2
  243.         MOV     BX,DX
  244.         MOV     DX,[BX]
  245. IO2:    MOV     AH,044H
  246.         INT     21H
  247.         JNC     IO1
  248.         NEG     AX
  249. IO1:    CMP     BYTE PTR [BP],0
  250.         JNE     IO3
  251.         LDS     BX,DWORD PTR [BP+4]
  252.         MOV     [BX],DX
  253. IO3:    POP     DS
  254.         EXIT
  255.         RET     10
  256. C_IOCTL ENDP
  257.  
  258. C_IO    ENDS
  259.         END
  260.